package com.yoyosys.shared.service.impl;

import com.alibaba.fastjson.JSON;
import com.yoyosys.common.vo.Message;
import com.yoyosys.shared.mapper.ApiInfoMapper;
import com.yoyosys.shared.po.ApiInfo;
import com.yoyosys.shared.vo.ApiInfoVo;
import com.yoyosys.shared.vo.DependencyApi;
import com.yoyosys.shared.service.ApiInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

@Service
public class ApiInfoServiceImpl implements ApiInfoService {
    @Autowired
    private ApiInfoMapper apiInfoMapper;

    @Override
    public Message apiinfo(ApiInfoVo apiInfo) {
        Message message = new Message();
        try {

            ApiInfo apiInfos = new ApiInfo();
            apiInfos.setApiCode(apiInfo.getApiCode());
            apiInfos.setApiLabel(apiInfo.getApiLabel());
            apiInfos.setApiDescr(apiInfo.getApiDescr());
            apiInfos.setCreateUser(apiInfo.getCreateUser());
            apiInfos.setCreateDt(apiInfo.getCreateDt());
            apiInfos.setTeamName(apiInfo.getTeamName());
            apiInfos.setEffDt(apiInfo.getEffDt());
            apiInfos.setExpDt(apiInfo.getExpDt());
            apiInfos.setRequestId(apiInfo.getRequestId());
            // 处理依赖关系
            if (apiInfo.getDependencys() != null) {
                List<DependencyApi> dependencies = apiInfo.getDependencys().stream()
                        .map(dto -> {
                            DependencyApi dependency = new DependencyApi();
                            dependency.setFroms(dto.getFroms());
                            dependency.setJobId(dto.getJobId());
                            dependency.setOptionDesc(dto.getOptionDesc());
                            dependency.setTo(dto.getTo());
                            dependency.setToSystem(dto.getToSystem());
                            return dependency;
                        })
                        .collect(Collectors.toList());
                apiInfos.setDependencys(JSON.toJSONString(dependencies));
            }
            ApiInfo apiInfoData =apiInfoMapper.selectApiinfo(apiInfo.getApiCode());
            if(apiInfoData != null){
                apiInfoMapper.updateApiinfo(apiInfos);
            }else {
                apiInfoMapper.apiinfo(apiInfos);
            }

            message.setSuccessMsg("API基本信息提交成功");
            message.setData(apiInfos.getRequestId());
            message.setCode("200");
        }catch (Exception e){
            message.setErrorMsg("API基本信息提交失败");
            message.setCode("500");
            message.setData(e.getMessage());
        }
        return message;
    }
}
